package com.itheima.examination7;

import java.io.*;
import java.nio.charset.StandardCharsets;

public class FileCopyWithThread {
    public static void main(String[] args) {
        // 在项目根目录创建测试文件a.txt（如果不存在）
        createTestFile();

        // 记录开始时间
        long startTime = System.currentTimeMillis();

        // 使用匿名内部类方式开启线程完成文件复制
        Thread copyThread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    // 使用字符缓冲流复制文件
                    copyFileWithBufferedReader();
                    System.out.println("文件复制完成！");
                } catch (IOException e) {
                    System.err.println("文件复制过程中发生错误: " + e.getMessage());
                    e.printStackTrace();
                }
            }
        });

        // 启动线程
        copyThread.start();

        try {
            // 等待线程执行完成
            copyThread.join();

            // 记录结束时间
            long endTime = System.currentTimeMillis();

            // 计算并输出执行时间
            long duration = endTime - startTime;
            System.out.println("文件复制总耗时: " + duration + " 毫秒");

        } catch (InterruptedException e) {
            System.err.println("线程等待过程中发生错误: " + e.getMessage());
            e.printStackTrace();
        }
    }

    private static void copyFileWithBufferedReader() throws IOException {
        // 使用字符缓冲流对象一次读写一行的方式复制文本文件
        try (BufferedReader reader = new BufferedReader(new FileReader("a.txt", StandardCharsets.UTF_8));
             BufferedWriter writer = new BufferedWriter(new FileWriter("b.txt", StandardCharsets.UTF_8))) {

            String line;
            while ((line = reader.readLine()) != null) {
                writer.write(line);
                writer.newLine(); // 写入换行符
            }
        }
    }

    private static void createTestFile() {
        File testFile = new File("a.txt");
        if (!testFile.exists()) {
            try (BufferedWriter writer = new BufferedWriter(new FileWriter("a.txt", StandardCharsets.UTF_8))) {
                // 写入一些测试内容
                for (int i = 1; i <= 100; i++) {
                    writer.write("这是第 " + i + " 行测试数据");
                    writer.newLine();
                }
                writer.write("文件复制测试完成！");
                System.out.println("测试文件 a.txt 创建成功！");
            } catch (IOException e) {
                System.err.println("创建测试文件时发生错误: " + e.getMessage());
            }
        }
    }
}
